#ifndef SIMULATION_CORE_POINT_H
#define SIMULATION_CORE_POINT_H

#include <SimulationCore/Core.h>
#include <vector>
namespace SimulationCore
{
    class SimPoint
    {
        public:
        SimPoint()
        :m_x(0),m_y(0),m_z(0)
        {
            
        }

        SimPoint(double x, double y)
        :m_x(x),m_y(y),m_z(0)
        {
            
        }


        SimPoint(double x, double y,double z)
        :m_x(x),m_y(y),m_z(y){}


        SimPoint operator+(const SimPoint& p) const
        {
            return SimPoint(m_x+p.m_x,m_y+p.m_y,m_z+p.m_z);
        }

        SimPoint operator-(const SimPoint& p) const
        {
            return SimPoint(m_x-p.m_x,m_y-p.m_y,m_z-p.m_z);
        }

        SimPoint& operator+=(const SimPoint& p)
        {
            m_x+=p.m_x;
            m_y+=p.m_y;
            m_z+=p.m_z;
            return *this;
        }

        SimPoint& operator-=(const SimPoint& p)
        {
            m_x-=p.m_x;
            m_y-=p.m_y;
            m_z-=p.m_z;
            return *this;
        }

        CLASS_PARAMS_PUBLIC(double,m_x,x);
        CLASS_PARAMS_PUBLIC(double,m_y,y);
        CLASS_PARAMS_PUBLIC(double,m_z,z);
    };
    typedef std::vector<SimPoint> SimPointVector;
}

#endif